package indi.xliuovo.coursedesign.musicplayer;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    // 声明 ViewPager
    private ViewPager viewPager;
    // 声明适配器
    private FragmentPagerAdapter fragmentPagerAdapter;
    // 声明装载 Fragment 的集合
    private List<Fragment> fragments;
    // 声明2个 tab 对应的布局
    private LinearLayout tab1, tab2;
    // 声明2个 Fragment 中对应的 ImageButton
    private ImageButton musicBtn, mineBtn;
    // 声明 Fragment
    private MusicFragment musicFragment;
    private MineFragment mineFragment;

    String id;
    Bundle bundle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initViews(); // 初始化控件
        selectTab(0); // 设置初始页面为主页面
        initEvents(); // 初始化点击事件
        initData(); // 初始化数据
    }

    @Override
    protected void onResume() {
        super.onResume();

        bundle = new Bundle();
        getInfo();
        mineFragment.setArguments(bundle);
    }

    // 初始化控件
    private void initViews() {
        viewPager = (ViewPager) findViewById(R.id.viewPager);

        tab1 = (LinearLayout) findViewById(R.id.tab_left);
        tab2 = (LinearLayout) findViewById(R.id.tab_right);

        musicBtn = (ImageButton) findViewById(R.id.btn_music);
        mineBtn = (ImageButton) findViewById(R.id.btn_mine);

        musicFragment = new MusicFragment();
        mineFragment = new MineFragment();
    }

    // 为2个 layoutItem 注册点击事件
    private void initEvents() {
        tab1.setOnClickListener(this);
        tab2.setOnClickListener(this);
    }

    private void initData() {
        fragments = new ArrayList<Fragment>();
        // 将两个 Fragment 加入集合中
        fragments.add(musicFragment);
        fragments.add(mineFragment);

        // 获取用户Id
        Intent intent = this.getIntent();
        Bundle bundleReceived = intent.getExtras();
        id = bundleReceived.getString("userId");

        // 初始化适配器
        fragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                return fragments.get(position);
            }

            @Override
            public int getCount() {
                return fragments.size();
            }
        };

        // 设置 ViewPager 的适配器
        viewPager.setAdapter(fragmentPagerAdapter);
        // 将 ViewPager 的预加载个数设置为你的所有 Fragment 的数量，解决滑动时候轮播图出现空白的问题
        viewPager.setOffscreenPageLimit(fragments.size());
        // 设置 ViewPager 的切换监听
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            // 页面滚动事件
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            // 页面选中事件
            @Override
            public void onPageSelected(int position) {
                // 设置 position 对应的集合中的 fragment
                viewPager.setCurrentItem(position);
                resetImages();
                selectTab(position);
            }

            // 页面滚动状态改变事件
            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
    }

    @Override
    public void onClick(View v) {
        // 先将两个ImageButton置为灰色
        resetImages();
        switch (v.getId()) {
            case R.id.tab_left:
                selectTab(0);
                break;
            case R.id.tab_right:
                selectTab(1);
                break;
        }
    }

    // 将两个 ImageButton 重置为灰色
    private void resetImages() {
        musicBtn.setImageResource(R.drawable.logo_music_2);
        mineBtn.setImageResource(R.drawable.logo_mine_2);
    }

    private void selectTab(int i) {
        // 根据点击的 layoutItem 设置对应的 ImageButton 为选中的颜色
        switch (i) {
            case 0:
                musicBtn.setImageResource(R.drawable.logo_music_1);
                break;
            case 1:
                mineBtn.setImageResource(R.drawable.logo_mine_1);
                break;
        }
        // 设置当前点击的 Tab 所对应的页面
        viewPager.setCurrentItem(i);
    }

    // 获取个人信息
    void getInfo() {
        // 传递数据
        Map<String, String> userId = new HashMap<String, String>();
        userId.put("userId", id);

        MyThread myThread = new MyThread();
        myThread.toParams("user/information", userId); // 处理数据
        myThread.start();
        try {
            Thread.sleep(500); // 等待返回的结果
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if (((Double) myThread.result.get("code")).intValue() == 400) {
            Toast.makeText(getApplicationContext(), String.valueOf(myThread.result.get("msg")), Toast.LENGTH_SHORT).show();
        } else if (((Double) myThread.result.get("code")).intValue() == 200) {
            bundle.putString("userId", id);
            bundle.putString("userEmail", myThread.result.get("userEmail").toString());
            bundle.putString("userName", myThread.result.get("userName").toString());
        }
    }
}